管理服务高可用

高可用设计方案

整体设计

  • 采用双节点高可用方式,节点间采用 master-slave方式。
  • 采用节点整体高可用方式,即节点上任何一个关键服务出现故障即认为节点整体故障,触发高可用切换。
  • 采用 VIP + Keepalived 2.0 作为高可用套件。
  • 取消rabbitmq依赖,基于http实现cloudbus接口。
  • Prometheus使用influxDB作为存储后端。

具体流程

在管理节点上运行一个HA进程,该进程负责整个管理节点环境的初始化、配置、运维、watchdog等功能。

  • HA进程提供系统配置功能,提供命令行接口,可以调用HA命令将系统配置成高可用环境。
  • HA进程负责监控MN节点上的关键服务(管理节点进程,UI进程,MySQL),当任何一个服务宕机时,立即通过keep alived触发VIP迁移,然后尝试恢复宕机服务。
  • HA进程对keepalived进程进行watchdog,确保该进程持续运行。
  • HA进程提供命令,打印出集群的健康信息。
  • 引入一个网关做仲裁,避免双节点的脑裂问题。

在管理节点里实现一个InfluxDB http proxy,所有访问InfluxDB的http请求(包括管理节点对InfluxDB的读写请求,Prometheus对InfluxDB的读写请求)都通过InfluxDB http proxy进行。该http proxy完成以下功能:

  • 对InfluxDB所有的写http请求记录到journal数据库(可以考虑Leveldb或者Rocksdb实现)。
  • 将收到的写http请求同时复制到slave节点的InfluxDB proxy,实现journal的复制。
  • 节点宕机恢复时,通过journal恢复InfluxDB数据库。

管理节点高可用部署及升级

新装双管理节点环境,部署为双管理节点物理机高可用环境:

1. 下载官方发布的最新版ZStack Cloud定制版ISO、bin包和多管理节点高可用套件。

2. 对两个新管理节点安装最新版ZStack Cloud云平台。

3. 对两个新管理节点安装许可证,要求两个管理节点安装的许可证类型要求完全一致。

4. 将高可用套件导入其中一个管理节点,并解压安装。

5. 在一台管理节点上安装管理节点高可用套件,以A为例:准备好管理节点高可用安装包(ZStack-Enterprise-Multinode-HASuite.tar.gz)下载到管理节点A,然后执行如下命令解压安装包:

[root@localhost ~]# tar zxvf ZStack-Enterprise-Multinode-HA-Suite.tar.gz
[root@localhost ~]# chmod +x zsha2

6. 在管理节点A执行如下命令安装高可用套件:

[root@localhost ~]#./zsha2 sample-config > zs-install.config
[root@localhost ~]#vim zs-install.config
"gateway": "192.168.1.1",  # 主备管理节点的仲裁网关
"virtualIp": "192.168.1.254",  # 指定Keep Alived通信的VIP
"myIp": "192.168.1.100",  # 指定本机IP
"peerIp": "192.168.1.101",  # 指定Peer管理节点IP
"peerSshUser": "root",  # 指定Peer管理节点SSH用户名
"peerSshPass": "password",  # 指定Peer管理节点SSH密码
"peerSshPort": 22,  # 指定Peer管理节点SSH端口
"dbRootPass": "zstack.mysql.password",  # 指定主备管理节点的数据库root密码(必须相同)
"interface": "br_bond0",  # 物理设备名,用于配置VIP,生产环境一般是一个管理网络的网桥
"timeServer": "192.168.1.109"  # 指定时间同步服务器,用于统一时间同步

7. 确认好配置文件后开始安装:

[root@localhost ~]# ./zsha2 install-ha -config zs-install.config

高可用套件升级

  • 管理员获得新版高可用套件后,可用于升级当前的zsha2服务。
  • 当双管理节点的数据库完成自动同步后,将新版高可用套件导入VIP节点并解压,在VIP节点中执行以下命令,就可完成高可用套件升级:
[root@localhost ~]# ./zsha2 upgrade-ha

管理节点高可用应用

1. 高可用命令zsha2详解:

install-ha    安装高可用套件
stop-node     高可用状态下停止管理节点服务
start-node    高可用状态下启动管理节点服务
upgrade-mn    升级管理节点
upgrade-ha    升级高可用套件
demote        手动切换浮动IP
status        查询管理服务状态
show-config   查询高可用配置
sample-config 输出高可用配置模板
collect-log   收集高可用相关日志
db-status     查看双管理节点数据库状态 
db-sync       手动同步数据库       
change-ip     修改管理节点IP

2. 通过zsha2 status查询双管理节点服务状态

[root@zstack-2 mnt]# zsha2 status
Status report from 172.18.102.140
=================================
Owns virtual address:            no    
Self 172.18.102.140 reachable:   yes
Gateway 172.18.0.1 reachable:    yes
VIP 172.18.101.4 reachable:      yes
Peer 172.18.104.95 reachable:    yes
Keepalived status:               active
ZStack HA Monitor:               active
MySQL status:                    mysqld is alive
MN status: Running [PID:3605539]
UI status: Running [PID:3624770] http://172.18.102.140:5000
Slave Status:
-------------
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                   Last_Error:
        Seconds_Behind_Master: 0
                Last_IO_Error:
               Last_SQL_Error:

Status report from 172.18.104.95
================================
Owns virtual address:            yes  //表示主节点
Self 172.18.104.95 reachable:    yes
Gateway 172.18.0.1 reachable:    yes
VIP 172.18.101.4 reachable:      yes
Peer 172.18.102.140 reachable:   yes
Keepalived status:               active
ZStack HA Monitor:               active
MySQL status:                    mysqld is alive
MN status: Running [PID:1151684]
UI status: Running [PID:1162261] http://172.18.104.95:5000

Slave Status:
-------------
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                   Last_Error:
        Seconds_Behind_Master: 0
                Last_IO_Error:
               Last_SQL_Error:

Note: visit ZStack UI with http://172.18.101.4:5000

3. 通过zsha2 db-status查询双管理节点数据库状态

[root@zstack-2 mnt]# zsha2 db-status
+-----------------------+------------------------------------+---------------------------
|         NAME         |       LOCAL (172.18.102.140)      |PEER (172.18.104.95)        |
+-----------------------+------------------------------------+---------------------------
| Master_Server_Id     |                                 2 |                          1 |
| Local->Peer          |        mysql-bin.000002, 61503367 | mysql-bin.000002, 61503367 |
| Peer->Local          |        mysql-bin.000004, 58660177 | mysql-bin.000004, 58660177 |
| Seconds_Behind_Master|                                 0 |                          0 |
| Skip_Counter         |                                 0 |                          0 |
| Relay_Master_Log_File|                  mysql-bin.000004 |           mysql-bin.000002 |
| Exec_Master_Log_Pos  |                          58660177 |                   61503367 |
| Relay_Log_File       |mariadb-relay-bin.000002, 57985988 |mariadb-relay-bin.000010, 2362898 |
| Relay_Log_Space      |                          57986284 |                    2363478 |
| Slave_IO_Running     |                               Yes |                        Yes |
| Slave_SQL_Running    |                               Yes |                        Yes |
| Slave_IO_State       |                             event |                      event |
| Last_IO_Error        |                                   |                            |
| Last_SQL_Error       |                                   |                            |
+-----------------------+------------------------------------+---------------------------

4. 双管理节点数据库不同步时,可通过zsha2手动同步数据库,需要注意使用正常节点数据库进行同步,正常节点为非VIP节点时,使用zsha2 demote进行切换后同步。

[root@localhost ~]# zstack-ctl dump_mysql                  //双节点备份数据库
[root@localhost ~]# zsha2 stop-node                        //停止管理节点服务
[root@localhost ~]# zsha2 status                           //查询VIP所在节点
[root@localhost ~]# zsha2 demote                           //切换VIP节点,
[root@localhost ~]# zsha2 db-sync -p zstack.mysql.password //在VIP节点手动同步数据库
[root@localhost ~]# zsha2 db-status                        //检查双管理节点数据库状态

5. 解耦双管理节点高可用,在双管理节点下执行以下命令,解耦完成后请使用一个管理节点提供服务或重新安装高可用组件,single_mn_ip指的是管理节点真实的管理IP地址。

[root@localhost ~]# zsha2 stop-node
[root@localhost ~]# systemctl disable keepalived
[root@localhost ~]# systemctl disable zstack-ha
[root@localhost ~]# mysql -uroot -p zstack.mysql.password
MariaDB [zstack]> stop slave;
MariaDB [zstack]> reset slave all;
MariaDB [zstack]> show slave status;
[root@localhost ~]# zstack-ctl config_ui --db-url jdbc:mysql://single_mn_ip:3306
[root@localhost ~]# zstack-ctl configure DB.url=jdbc:mysql://single_mn_ip:3306
[root@localhost ~]# zstack-ctl config_ui --webhook-host 127.0.0.1

results matching ""

    No results matching ""